报名增加自定义字段

FFIB 2 anos atrás
pai
commit
76ef309480

+ 186 - 1
member/activity_mp_views.py

@@ -5,7 +5,7 @@ from django_logit import logit
5 5
 from django_response import response
6 6
 from paginator import pagination
7 7
 
8
-from member.models import MemberActivityInfo
8
+from member.models import MemberActivityInfo, MemberActivitySignupInfo, MemberActivityContributionInfo
9 9
 from utils.error.errno_utils import MemberActivityStatusCode
10 10
 
11 11
 
@@ -50,3 +50,188 @@ def activity_detail(request):
50 50
     return response(data={
51 51
         'activity': act.details(user_id),
52 52
     })
53
+
54
+
55
+@logit
56
+def activity_signup(request):
57
+    brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
58
+    user_id = request.POST.get('user_id', '')
59
+    activity_id = request.POST.get('activity_id', '')
60
+    fields = request.POST.get('fields', fields)
61
+
62
+    try:
63
+        act = MemberActivityInfo.objects.get(activity_id=activity_id, status=True)
64
+    except MemberActivityInfo.DoesNotExist:
65
+        return response(MemberActivityStatusCode.ACTIVITY_NOT_FOUND)
66
+
67
+    MemberActivitySignupInfo.objects.update_or_create(user_id=user_id, activity_id=activity_id, defaults={
68
+        'title': act.title,
69
+        'fields': fields,
70
+    })
71
+
72
+    # TODO: 立即推送模版消息(报名成功,时间,地点)
73
+    # TODO: 延迟(活动当天)推送模版消息(时间,地点)
74
+
75
+    return response(data={
76
+        'activity': act.data(user_id),
77
+    })
78
+
79
+
80
+@logit
81
+def activity_signup_detail(request):
82
+    brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
83
+    user_id = request.POST.get('user_id', '')
84
+    activity_id = request.POST.get('activity_id', '')
85
+
86
+    try:
87
+        signup_info = MemberActivitySignupInfo.objects.get(user_id=user_id, activity_id=activity_id, status=True)
88
+    except MemberActivitySignupInfo.DoesNotExist:
89
+        return response()
90
+
91
+    return response(data={
92
+        'signup_info': signup_info.data,
93
+    })
94
+
95
+
96
+@logit
97
+def activity_contribute_create(request):
98
+    brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
99
+    user_id = request.POST.get('user_id', '')
100
+    activity_id = request.POST.get('activity_id', '')
101
+    main_activity_id = request.POST.get('main_activity_id', '')
102
+    content_type = get_query_value(request, 'content_type', val_cast_type='int')
103
+    title = request.POST.get('title', '')
104
+    content = request.POST.get('content', '')
105
+    images = get_query_value(request, 'images', val_cast_type='listjson')
106
+    video_url = request.POST.get('video_url', '')
107
+
108
+    # 报名字段
109
+    user_name = request.POST.get('user_name', '')
110
+    user_avatar = request.POST.get('user_avatar', '')
111
+
112
+    # 校验用户是否存在
113
+    try:
114
+        UserInfo.objects.get(user_id=user_id)
115
+    except UserInfo.DoesNotExist:
116
+        return response(UserStatusCode.USER_NOT_FOUND)
117
+
118
+    MemberActivitySignupInfo.objects.update_or_create(user_id=user_id, activity_id=activity_id, defaults={
119
+        'title': act.title,
120
+        'name': user_name,
121
+        'avatar': user_avatar,
122
+    })
123
+
124
+    contribution = MemberActivityContributionInfo.objects.create(
125
+        brand_id=brand_id,
126
+        user_id=user_id,
127
+        activity_id=activity_id,
128
+        main_activity_id=main_activity_id,
129
+        content_type=content_type,
130
+        title=title,
131
+        content=content,
132
+        images=images,
133
+        video_url=video_url,
134
+        user_name=user_name,
135
+        user_avatar=user_avatar,
136
+    )
137
+
138
+    return response(data={
139
+        'contribution': contribution.data,
140
+    })
141
+
142
+
143
+@logit
144
+def activity_contribute_update(request):
145
+    brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
146
+    user_id = request.POST.get('user_id', '')
147
+    activity_id = request.POST.get('activity_id', '')
148
+    main_activity_id = request.POST.get('main_activity_id', '')
149
+    content_type = get_query_value(request, 'content_type', val_cast_type='int')
150
+    contribution_id = request.POST.get('contribution_id', '')
151
+    title = request.POST.get('title', '')
152
+    content = request.POST.get('content', '')
153
+    images = get_query_value(request, 'images', val_cast_type='listjson')
154
+    video_url = request.POST.get('video_url', '')
155
+
156
+    # 校验用户是否存在
157
+    try:
158
+        UserInfo.objects.get(user_id=user_id)
159
+    except UserInfo.DoesNotExist:
160
+        return response(UserStatusCode.USER_NOT_FOUND)
161
+
162
+    try:
163
+        signup_info = MemberActivitySignupInfo.objects.get(user_id=user_id, activity_id=activity_id, main_activity_id=main_activity_id, status=True)
164
+    except MemberActivitySignupInfo.DoesNotExist:
165
+        signup_info = None
166
+
167
+    contribution, _ = MemberActivityContributionInfo.objects.update_or_create(brand_id=brand_id, user_id=user_id, activity_id=activity_id, contribution_id=contribution_id, defaults={
168
+        'title': title,
169
+        'content': content,
170
+        'images': images,
171
+        'video_url': video_url,
172
+        'user_name': signup_info.name if signup_info else '',
173
+        'user_avatar': signup_info.final_avatar if signup_info else '',
174
+        'audit_status': 0,
175
+    })
176
+
177
+    return response(data={
178
+        'contribution': contribution.data,
179
+    })
180
+
181
+
182
+@logit
183
+def activity_contribute_list(request):
184
+    brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
185
+    user_id = request.POST.get('user_id', '')
186
+    main_activity_id = request.POST.get('main_activity_id', '')
187
+    activity_id = request.POST.get('activity_id', '')
188
+    content_type = get_query_value(request, 'content_type', val_cast_type='int')
189
+    is_myself = get_query_value(request, 'is_myself', val_cast_type='int')
190
+    audit_status = get_query_value(request, 'audit_status', val_cast_type='int')
191
+    is_audit_pass = get_query_value(request, 'is_audit_pass', val_cast_type='int')
192
+    is_selected = get_query_value(request, 'is_selected', val_cast_type='int')
193
+    page = request.POST.get('page', 1)
194
+    num = request.POST.get('num', 20)
195
+
196
+    if main_activity_id:
197
+        contributions = MemberActivityContributionInfo.objects.filter(main_activity_id=main_activity_id, status=True)
198
+    else:
199
+        contributions = MemberActivityContributionInfo.objects.filter(activity_id=activity_id, status=True)
200
+
201
+    if 'content_type' in request.POST:
202
+        contributions = contributions.filter(content_type=content_type)
203
+    if 'is_myself' in request.POST:
204
+        if is_myself:
205
+            contributions = contributions.filter(user_id=user_id)
206
+        else:
207
+            contributions = contributions.exclude(user_id=user_id)
208
+    if 'audit_status' in request.POST:
209
+        contributions = contributions.filter(audit_status=audit_status)
210
+    if 'is_audit_pass' in request.POST:
211
+        if is_audit_pass:
212
+            contributions = contributions.filter(audit_status=MemberActivityContributionInfo.AUDIT_PASS)
213
+        else:
214
+            contributions = contributions.exclude(audit_status=MemberActivityContributionInfo.AUDIT_PASS)
215
+    if 'is_selected' in request.POST:
216
+        contributions = contributions.filter(is_selected=is_selected)
217
+    contributions = contributions.order_by('-pk')
218
+    contributions, left = pagination(contributions, page, num)
219
+    contributions = [contribution.data for contribution in contributions]
220
+
221
+    return response(data={
222
+        'contributions': contributions,
223
+        'left': left,
224
+    })
225
+
226
+
227
+@logit
228
+def activity_contribute_detail(request):
229
+    brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
230
+    contribution_id = request.POST.get('contribution_id', '')
231
+
232
+    try:
233
+        contribution = MemberActivityContributionInfo.objects.get(contribution_id=contribution_id, status=True)
234
+    except MemberActivityContributionInfo.DoesNotExist:
235
+        return response(MemberActivityContributionStatusCode.ACTIVITY_CONTRIBUTION_NOT_FOUND)
236
+
237
+    return response(data=contribution.data)

+ 21 - 0
member/migrations/0062_memberactivitysignupinfo_fields.py

@@ -0,0 +1,21 @@
1
+# -*- coding: utf-8 -*-
2
+
3
+# Generated by Django 3.2.6 on 2023-05-15 08:07
4
+
5
+from django.db import migrations
6
+import jsonfield.fields
7
+
8
+
9
+class Migration(migrations.Migration):
10
+
11
+    dependencies = [
12
+        ('member', '0061_alter_memberactivityinfo_feed_id'),
13
+    ]
14
+
15
+    operations = [
16
+        migrations.AddField(
17
+            model_name='memberactivitysignupinfo',
18
+            name='fields',
19
+            field=jsonfield.fields.JSONField(blank=True, default='[]', help_text='自定义报名字段', null=True, verbose_name='fields'),
20
+        ),
21
+    ]

+ 4 - 0
member/models.py

@@ -718,6 +718,8 @@ class MemberActivitySignupInfo(BaseModelMixin, BrandInfoMixin):
718 718
     name = models.CharField(_(u'name'), max_length=255, blank=True, null=True, help_text=u'姓名')
719 719
     phone = models.CharField(_(u'phone'), max_length=255, blank=True, null=True, help_text=u'电话')
720 720
 
721
+    fields = JSONField(_(u'fields'), blank=True, null=True, default='[]', help_text=u'自定义报名字段')
722
+
721 723
     class Meta:
722 724
         verbose_name = _(u'会员活动报名信息')
723 725
         verbose_name_plural = _(u'会员活动报名信息')
@@ -741,6 +743,7 @@ class MemberActivitySignupInfo(BaseModelMixin, BrandInfoMixin):
741 743
             'avatar': self.final_avatar,
742 744
             'name': self.name,
743 745
             'phone': self.phone,
746
+            'fields': json.loads(self.fields) if self.fields else [],
744 747
         }
745 748
 
746 749
     @property
@@ -753,6 +756,7 @@ class MemberActivitySignupInfo(BaseModelMixin, BrandInfoMixin):
753 756
             'avatar': self.final_avatar,
754 757
             'name': self.name,
755 758
             'phone': self.phone,
759
+            'fields': json.loads(self.fields) if self.fields else [],
756 760
         }
757 761
 
758 762
 

+ 14 - 0
member/mp_urls.py

@@ -10,3 +10,17 @@ urlpatterns = [
10 10
     url(r'^member/activity/list$', activity_mp_views.activity_list, name='mp_member_activity_list'),  # 获取会员分区活动列表
11 11
     url(r'^member/activity/detail$', activity_mp_views.activity_detail, name='mp_member_activity_detail'),  # 获取会员分区活动详情
12 12
 ]
13
+
14
+# activity signup
15
+urlpatterns += [
16
+    url(r'^member/activity/signup$', activity_mp_views.activity_signup, name='mp_member_activity_signup'),  # 会员活动报名
17
+    url(r'^member/activity/signup/detail$', activity_mp_views.activity_signup_detail, name='mp_member_activity_signup_detail'),  # 获取会员活动报名信息
18
+]
19
+
20
+# activity contribution
21
+urlpatterns += [
22
+    url(r'^member/activity/contribute/create$', activity_mp_views.activity_contribute_create, name='mp_member_activity_contribute_create'),
23
+    url(r'^member/activity/contribute/list$', activity_mp_views.activity_contribute_list, name='member_activity_contribute_list'),
24
+    url(r'^member/activity/contribute/update$', activity_mp_views.activity_contribute_update, name='member_aactivity_contribute_update'),
25
+    url(r'^member/activity/contribute/detail$', activity_mp_views.activity_contribute_detail, name='member_activity_contribute_detail'),
26
+]